

public class Main {
    public static void main(String[] args) {
        //布尔常量：true false
        //字符常量：'a' 不可空 不能有空字符
        //字符串常量：“”双引号里的 可空

        //1.整形常量
        int c = 100;
        System.out.println(c);
        //2.字符型常量
        char ch = 'm';
        System.out.println(ch);
        //3.布尔型常量
        boolean b1 = true;//只能复制true和false
        System.out.println(b1);
        boolean b2 = false;
        System.out.println(b2);

        double d = 3.14;
        {
            d = 5.62;
            System.out.println(d);
        }
        System.out.println(d);//d的值已经改变


        /**
         * byte -> short -> int -> long -> float -> double
         * 随机挑选箭头方向两种数据类型都是自动类型提升
         */
        long b = 134;//134是int类型常量, int常量赋值给long变量,是自动类型提升
        //将int类型的134 提升成了long类型
        //自动含义是指编译器帮我们做了int=>long类型提升不需要手动干预(隐式)
        int i = 13;
        double d1 = 17; //自动类型提升 int的17提升成了double类型
        //d1变量中存储的是17提升成double类型的值17.0
        double d2 = i; //将i类型提升为double类型,i的值也从13变成了13.0
        //再将13.0赋值给d2
        System.out.println(d1);//17.0
        System.out.println(i);//13
        System.out.println(d2);//13.0
        //long l = 2232321232323//java默认数据类型为int型，所以还会报错。
        long l = 2232321232323L;//此时在整数常量末尾添加L(l),那么这个整数常量就不会再当成默认类型int去检测,而是在编译时当成long类型去检测是否在long的数值范围内


        //double d = 3.14; // 3.14是double常量,左侧是double变量,不是自动类型提升
        // float f = 3.14; // 3.14是double常量,左侧是float类型,double->float不是自动类型提升
        float f = 3.14f; // 3.14f代表float类型常量,左侧是float类型变量
        double z =3.14d; //3.14d代表double类型常量,3,14d(D)和3.14是完全等效的,因此d(D)可以省略






    }
}